package util;

import org.springframework.util.ObjectUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 截取对象中字符串属性的长度
 * @author oahner
 * @create 2022-04-19 21:55
 */
public class CropStringUtil {


    /**
     * 截取对象中长度大于50的String类型属性
     * @param obj
     * @return
     */
    public static Object cropString(Object obj) {
        Class cls = obj.getClass();
        //获得属性值
        Field[] fields = cls.getDeclaredFields();

        //遍历其中的属性
        for (Field field : fields) {
            field.setAccessible(true);
            try{
                String fieldName = initStr(field.getName());
                //判断属性类型是否为String
                if (field.getType() == String.class) {
                    //通过get方法取出属性值
                    Method getMethodObj = cls.getMethod("get"+fieldName);
                    //如果get值不为空，并且长度大于50，则调用set方法进行赋值
                    if(!ObjectUtils.isEmpty(getMethodObj.invoke(obj)) && getMethodObj.invoke(obj).toString().length()>50){
                        String subStr = getMethodObj.invoke(obj).toString().substring(0,50);
                        Method setMethodReObj = cls.getMethod("set"+fieldName,field.getType());
                        setMethodReObj.invoke(obj,subStr);
                    }
                } else {
                    continue;
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return obj;
    }

    /**
     * 将单词的首字母大写
     * @param old 需要变化的字符串
     * @return
     */
    public static String initStr(String old){

        if(old.length() == 2 || old.length()>3){
            old = old.substring(0,1).toUpperCase() + old.substring(1) ;
        }

        return old ;
    }


}
